#!/bin/bash

# 自动化Git提交和Gitee Release上传脚本
# 使用方法: ./auto_git_gitee.sh <文件路径> [选项]

set -e # 遇到错误立即退出

# 加载配置文件
CONFIG_FILE="gitee_config.env"
if [[ -f "$CONFIG_FILE" ]]; then
    source "$CONFIG_FILE"
else
    echo "警告: 配置文件 '$CONFIG_FILE' 不存在，请创建配置文件或使用命令行参数"
fi

# 默认参数（从配置文件加载，或使用默认值）
DEFAULT_OWNER="${GITEE_OWNER:-}"
DEFAULT_REPO="${GITEE_REPO:-}"
DEFAULT_TOKEN="${GITEE_TOKEN:-}"
DEFAULT_BRANCH="${GITEE_BRANCH:-master}"

# 显示帮助信息
show_help() {
  echo "使用方法: $0 <文件路径> [选项]"
  echo ""
  echo "参数:"
  echo "  <文件路径>    要上传到Gitee Release的文件路径（必需）"
  echo ""
  echo "选项:"
  echo "  --owner OWNER     仓库所有者用户名（默认: $DEFAULT_OWNER）"
  echo "  --repo REPO       仓库名称（默认: $DEFAULT_REPO）"
  echo "  --token TOKEN     Gitee访问令牌（默认: 使用预设令牌）"
  echo "  --branch BRANCH   目标分支（默认: $DEFAULT_BRANCH）"
  echo "  --tag TAG         发行版标签（默认: 当前日期 YYYYMMDD）"
  echo "  --name NAME       发行版名称（默认: 当前日期 YYYY-MM-DD Update）"
  echo "  --no-git-push     只上传到Release，不执行Git操作"
  echo "  --ai-commit       使用AI生成提交消息"
  echo "  --help            显示此帮助信息"
  echo ""
  echo "示例:"
  echo "  $0 releases/chapter1.pdf --owner myname --repo myrepo --tag v1.0.0"
  echo "  $0 my_file.txt --ai-commit"
}
# 解析命令行参数
FILE_PATH=""
OWNER="$DEFAULT_OWNER"
REPO="$DEFAULT_REPO"
TOKEN="$DEFAULT_TOKEN"
BRANCH="$DEFAULT_BRANCH"
TAG=$(date +"%Y%m%d")
NAME="$(date +"%Y-%m-%d") Update"
DO_GIT_PUSH=true
USE_AI_COMMIT=false

# 解析参数
while [[ $# -gt 0 ]]; do
  case $1 in
  --owner)
    OWNER="$2"
    shift 2
    ;;
  --repo)
    REPO="$2"
    shift 2
    ;;
  --token)
    TOKEN="$2"
    shift 2
    ;;
  --branch)
    BRANCH="$2"
    shift 2
    ;;
  --tag)
    TAG="$2"
    shift 2
    ;;
  --name)
    NAME="$2"
    shift 2
    ;;
  --no-git-push)
    DO_GIT_PUSH=false
    shift
    ;;
  --ai-commit)
    USE_AI_COMMIT=true
    shift
    ;;
  --help)
    show_help
    exit 0
    ;;
  -*)
    echo "错误: 未知选项 $1"
    show_help
    exit 1
    ;;
  *)
    if [[ -z "$FILE_PATH" ]]; then
      FILE_PATH="$1"
      shift
    else
      echo "错误: 只能指定一个文件路径"
      show_help
      exit 1
    fi
    ;;
  esac
done

# 检查必需参数
if [[ -z "$FILE_PATH" ]]; then
  echo "错误: 必须指定要上传的文件路径"
  show_help
  exit 1
fi

if [[ ! -f "$FILE_PATH" ]]; then
  echo "错误: 文件 '$FILE_PATH' 不存在或不是普通文件"
  exit 1
fi

# 检查Python脚本是否存在
if [[ ! -f "gitee_release_upload.py" ]]; then
  echo "错误: 找不到 gitee_release_upload.py 脚本"
  echo "请确保该脚本与当前脚本在同一目录下"
  exit 1
fi

# 检查必要的命令是否存在
check_command() {
  if ! command -v "$1" &>/dev/null; then
    echo "错误: 未找到命令 '$1'，请先安装"
    exit 1
  fi
}

check_command "git"
# Check for either python3 or uv
if ! command -v "uv" &>/dev/null && ! command -v "python3" &>/dev/null; then
    echo "错误: 未找到 'uv' 或 'python3' 命令，请先安装其中一个"
    exit 1
fi

# Use uv if available, otherwise fall back to python3
if command -v "uv" &>/dev/null; then
    PYTHON_CMD="uv run"
    echo "使用 uv 运行 Python 脚本"
else
    PYTHON_CMD="python3"
    echo "使用 python3 运行 Python 脚本"
fi

# 打印配置信息
echo "=== 自动化Git和Gitee Release上传脚本 ==="
echo "文件路径: $FILE_PATH"
echo "仓库: $OWNER/$REPO"
echo "分支: $BRANCH"
echo "Release标签: $TAG"
echo "Release名称: $NAME"
echo "执行Git推送: $DO_GIT_PUSH"
echo "========================================"

# 函数：执行Git操作
git_operations() {
  echo "步骤1: 执行Git操作..."

  # 检查是否在Git仓库中
  if ! git rev-parse --git-dir >/dev/null 2>&1; then
    echo "错误: 当前目录不是Git仓库"
    exit 1
  fi

  # 检查是否有更改
  if git diff-index --quiet HEAD --; then
    echo "没有检测到文件更改，跳过Git提交"
    return 0
  fi

  # 添加所有更改
  echo "添加文件到Git暂存区..."
  if ! git add .; then
    echo "错误: Git add 失败"
    exit 1
  fi

  # 提交更改
  if [[ "$USE_AI_COMMIT" == true ]]; then
    echo "正在生成AI提交消息..."
    # Try to use AI to generate a commit message
    if [[ -f "git_diff_analyzer.py" ]]; then
      # Get the AI-generated commit message (first line of output)
      AI_COMMIT_MESSAGE=$($PYTHON_CMD git_diff_analyzer.py --ai-summary 2>/dev/null | head -n 1 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
      
      if [[ -n "$AI_COMMIT_MESSAGE" && "$AI_COMMIT_MESSAGE" != "❌"* ]]; then
        COMMIT_MESSAGE="$AI_COMMIT_MESSAGE"
        echo "使用AI生成的提交消息: $COMMIT_MESSAGE"
      else
        echo "AI提交消息生成失败，使用默认消息"
        COMMIT_MESSAGE="Auto commit: $(date)"
      fi
    else
      echo "git_diff_analyzer.py 不存在，使用默认消息"
      COMMIT_MESSAGE="Auto commit: $(date)"
    fi
  else
    COMMIT_MESSAGE="Auto commit: $(date)"
  fi
  
  echo "提交更改: $COMMIT_MESSAGE"
  if ! git commit -m "$COMMIT_MESSAGE"; then
    echo "错误: Git commit 失败"
    exit 1
  fi

  # 推送到远程仓库
  echo "推送到远程仓库..."
  if ! git push origin "$BRANCH"; then
    echo "错误: Git push 失败"
    exit 1
  fi

  echo "✓ Git操作完成"
}

# 函数：上传到Gitee Release
upload_to_release() {
  echo "步骤2: 上传到Gitee Release..."

  # 转义文件路径中的特殊字符
  ESCAPED_FILE_PATH=$(printf '%q' "$FILE_PATH")

  # 执行Python上传脚本
  $PYTHON_CMD gitee_release_upload.py "$FILE_PATH" \
    --owner "$OWNER" \
    --repo "$REPO" \
    --token "$TOKEN" \
    --tag "$TAG" \
    --name "$NAME" \
    --branch "$BRANCH"

  echo "✓ Release上传完成"
}

# 主执行流程
main() {
  # 执行Git操作（如果启用）
  if [[ "$DO_GIT_PUSH" == true ]]; then
    git_operations
  else
    echo "跳过Git操作（--no-git-push 已指定）"
  fi

  # 上传到Gitee Release
  upload_to_release

  echo ""
  echo "🎉 所有操作完成！"
  echo "📁 文件已上传到: https://gitee.com/$OWNER/$REPO/releases/tag/$TAG"
}

# 执行主函数
main
